/**
 * @author LKQ
 * @date 2022/1/2 10:22
 * @description
 */
public class AmazingSolution {
    public static void main(String[] args) {

    }
    public int lastRemaining(int n) {
        // 定义f[i]为在连续序列[1,i]中进行【从左到右】的间隔删除，最终左边剩余的编号；f`[i]为在连续序列[1, i]中进行【从右往左】
        // 的间隔删除，最终左边剩余的编号。由于从左到右和从右到左间隔删除具有对称性，所以f[i] + f`[i] = i + 1;
        return n == 1 ? 1 : 2 * (n / 2 + 1 - lastRemaining(n / 2));
    }
}
